package mc0243;
import java.util.Arrays;
import java.util.Scanner;

/*
mc0243,码蹄集
输入：
2
5 5 1
2 4 4
输出：
25
2
 */
public class Main {
	static int t;
	static int p,q,k;
	//初始化地图数组
	static int[][] mp;
	
	static int mod = 337077;
	static long ans; //答案
	//x和y表示排和列
	static boolean check(int x,int y) {
		//检查上方
		if(x>0&&mp[x-1][y]==1) {
			return false;
		}
		//检查下方
		if(x<q-1&&mp[x+1][y]==1) {
			return false;
		}
		//检查左方
		if(y>0&&mp[x][y-1]==1) {
			return false;
		}
		//检查右方
		if(y<p-1&&mp[x][y+1]==1) {
			return false;
		}
		
		return true;
	}
	//打印mp，调试用
	static void printmp() {
		System.out.println("---------------------------");
		System.out.printf("ans:%d\n",ans);
		for(int i=0;i<mp.length;i++) {
			System.out.println(Arrays.toString(mp[i]));
		}
	}
	//dfs2,a表示已检测位置编号，counts表示已选座位数
	static void dfs2(int a,int counts) {
		//如果已经有k个位置被占则退出递归
		if(counts == k) {
			//找到一个解
			ans++;
			//当前dfs结束
			printmp();
			return;
		}
		
		//待检测位置顺序编号a+1
		for(int i=a;i<p*q;i++) {
			//将位置顺序编号转换成排x和列y
			int x = i/p;
			int y = i%p;
			
			if(check(x,y)) {
				mp[x][y] = 1;
						
				dfs2(i+1,counts+1);
						
			    mp[x][y] = 0;
			}
		}
	}
	//dfs1,x和y表示排和列，counts表示已选座位数
	static void dfs1(int x,int y,int counts) {
		//如果已经有k个位置被占则退出递归
		if(counts == k) {
			//找到一个解
			ans++;
			//当前dfs结束
			//printmp();
			return;
		}
		
		//从x排y列开始
		//遍历尝试后面每个座位
		//循环顺序按列往后，排坐满后换到下一排，列从0开始
		for(int i=x;i<q;i++) {
			//当前行列起点为y
			//下一行列起点为0
			int ys;
			if(i == x) {
				ys = y;
			}else {
				ys = 0;
			}
			for(int j=ys;j<p;j++) {
				
				//判断是否四周都有空
				if(check(i,j)) {
					mp[i][j] = 1; //占座
									
					//继续dfs
					//注意下一个位置的判断
					if(j<p-1) //当前排没坐满，下个位置为列加一
						dfs1(i,j+1,counts+1);
					else//当前排坐满，下个位置为排加一，列从0开始
						dfs1(i+1,0,counts+1);
					
					mp[i][j] = 0; //回溯
				}
			}
		}
	}
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		t = sc.nextInt();
		
		while(t-- >0) {
			p = sc.nextInt();
			q = sc.nextInt();
			k = sc.nextInt();
			//初始化地图mp
			mp = new int[q+1][];  //q排
			for(int i=0;i<=q;i++) { 
				//每排p个
				mp[i] = new int[p+1];
			}
			ans=0;
			//前两个参数表示从0排0列第一个位置开始检查
			//第三个参数表示已占座人数为0
			//dfs1(0,0,0);
			//第一个参数表示已检查0个位置
			//第二个参数表示已占座人数为0
			dfs2(0,0);
			System.out.println(ans%mod);
		}
	}

}
